ZGlmZiAtLWdpdCBhL2JvYXJkL2VORVQvTWFrZWZpbGUgYi9ib2FyZC9lTkVUL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MTNiNGIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9lTkVUL01ha2VmaWxlCkBAIC0wLDAgKzEsNTcgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA4CisjIEdyYWVtZSBSdXNzLCBncmFlbWUucnVzc0BnbWFpbC5jb20uCisjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyAoQykgQ29weXJpZ2h0IDIwMDIKKyMgRGFuaWVsIEVuZ3N0cvZtLCBPbWljcm9uIENldGkgQUIsIGRhbmllbEBvbWljcm9uLnNlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gJChvYmopbGliJChCT0FSRCkuYQorCitDT0JKUwk6PSBlTkVULm8KK1NPQkpTCTo9IGVORVRfc3RhcnQxNi5vIGVORVRfc3RhcnQubworCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKKwkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKUykgJChTT0JKUykKKworY2xlYW46CisJcm0gLWYgJChTT0JKUykgJChPQkpTKQorCitkaXN0Y2xlYW46CWNsZWFuCisJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgJChvYmopLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCisKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZU5FVC9jb25maWcubWsgYi9ib2FyZC9lTkVUL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzYzODQxCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvZU5FVC9jb25maWcubWsKQEAgLTAsMCArMSwyNCBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDIKKyMgRGFuaWVsIEVuZ3N0cvZtLCBPbWljcm9uIENldGkgQUIsIGRhbmllbEBvbWljcm9uLnNlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitURVhUX0JBU0UgPSAweDM4MDQwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9lTkVUL2VORVQuYyBiL2JvYXJkL2VORVQvZU5FVC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZGQ2MzUKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9lTkVUL2VORVQuYwpAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOAorICogR3JhZW1lIFJ1c3MsIGdyYWVtZS5ydXNzQGdtYWlsLmNvbS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2ljL3NjNTIwLmg+CisKKyNpZmRlZiBDT05GSUdfSFdfV0FUQ0hET0cKKyNpbmNsdWRlIDx3YXRjaGRvZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJoYXJkd2FyZS5oIgorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworI3VuZGVmIFNDNTIwX0NEUF9ERUJVRworCisjaWZkZWYJU0M1MjBfQ0RQX0RFQlVHCisjZGVmaW5lCVBSSU5URihmbXQsYXJncy4uLikJcHJpbnRmIChmbXQgLCMjYXJncykKKyNlbHNlCisjZGVmaW5lIFBSSU5URihmbXQsYXJncy4uLikKKyNlbmRpZgorCit1bnNpZ25lZCBsb25nIG1vbml0b3JfZmxhc2hfbGVuID0gQ09ORklHX1NZU19NT05JVE9SX0xFTjsKKwordm9pZCBpbml0X3NjNTIwX2VuZXQgKHZvaWQpCit7CisJLyogU2V0IENQVSBTcGVlZCB0byAxMDBNSHogKi8KKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfQ1BVQ1RMLCAxKTsKKwlnZC0+Y3B1X2NsayA9IDEwMDAwMDAwMDsKKworCS8qIHdhaXQgYXQgbGVhc3Qgb25lIG1pbGxpc2Vjb25kICovCisJYXNtKCJtb3ZsCSQweDIwMDAsJSVlY3hcbiIKKwkgICAgIndhaXRfbG9vcDoJcHVzaGwgJSVlY3hcbiIKKwkgICAgInBvcGwJJSVlY3hcbiIKKwkgICAgImxvb3Agd2FpdF9sb29wXG4iOiA6IDogImVjeCIpOworCisJLyogdHVybiBvbiB0aGUgU0RSQU0gd3JpdGUgYnVmZmVyICovCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0RCQ1RMLCAweDExKTsKKworCS8qIHR1cm4gb24gdGhlIGNhY2hlIGFuZCBkaXNhYmxlIHdyaXRlIHRocm91Z2ggKi8KKwlhc20oIm1vdmwJJSVjcjAsICUlZWF4XG4iCisJICAgICJhbmRsCSQweDlmZmZmZmZmLCAlJWVheFxuIgorCSAgICAibW92bAklJWVheCwgJSVjcjBcbiIgIDogOiA6ICJlYXgiKTsKK30KKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgcGxhdGZvcm0gZGVwZW5kZW50IGluaXRpYWxpemF0aW9ucworICovCitpbnQgYm9hcmRfaW5pdCh2b2lkKQoreworCWluaXRfc2M1MjBfZW5ldCgpOworCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQQ1NSVCwgMHgwMSk7CQkvKiBHUCBDaGlwIFNlbGVjdCBSZWNvdmVyeSBUaW1lICovCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQQ1NQVywgMHgwNyk7CQkvKiBHUCBDaGlwIFNlbGVjdCBQdWxzZSBXaWR0aCAqLworCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUENTT0ZGLCAweDAwKTsJCS8qIEdQIENoaXAgU2VsZWN0IE9mZnNldCAqLworCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUFJEVywgMHgwNSk7CQkvKiBHUCBSZWFkIHB1bHNlIHdpZHRoICovCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQUkRPRkYsIDB4MDEpOwkJLyogR1AgUmVhZCBvZmZzZXQgKi8KKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfR1BXUlcsIDB4MDUpOwkJLyogR1AgV3JpdGUgcHVsc2Ugd2lkdGggKi8KKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfR1BXUk9GRiwgMHgwMSk7CQkvKiBHUCBXcml0ZSBvZmZzZXQgKi8KKworCXdyaXRlX21tY3Jfd29yZChTQzUyMF9QSU9EQVRBMTVfMCwgMHgwNjMwKTsJLyogUElPMTVfUElPMCBEYXRhICovCisJd3JpdGVfbW1jcl93b3JkKFNDNTIwX1BJT0RBVEEzMV8xNiwgMHgyMDAwKTsJLyogUElPMzFfUElPMTYgRGF0YSAqLworCXdyaXRlX21tY3Jfd29yZChTQzUyMF9QSU9ESVIzMV8xNiwgMHgyMDAwKTsJLyogR1BJTyBEaXJlY3Rpb24gKi8KKwl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfUElPRElSMTVfMCwgMHg4N2I1KTsJLyogR1BJTyBEaXJlY3Rpb24gKi8KKwl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfUElPUEZTMzFfMTYsIDB4MGRmZSk7CS8qIEdQSU8gcGluIGZ1bmN0aW9uIDMxLTE2IHJlZyAqLworCXdyaXRlX21tY3Jfd29yZChTQzUyMF9QSU9QRlMxNV8wLCAweDIwMGEpOwkvKiBHUElPIHBpbiBmdW5jdGlvbiAxNS0wIHJlZyAqLworCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9DU1BGUywgMHgwMGY4KTsJCS8qIENoaXAgU2VsZWN0IFBpbiBGdW5jdGlvbiBTZWxlY3QgKi8KKworCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVIyLCAweDIwMDcxM2Y4KTsJLyogVWFydCBBIChHUENTMCwgMHgwMTNmOCwgOCBCeXRlcykgKi8KKwl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSMywgMHgyYzA3MTJmOCk7CS8qIFVhcnQgQiAoR1BDUzMsIDB4MDEyZjgsIDggQnl0ZXMpICovCisJd3JpdGVfbW1jcl9sb25nKFNDNTIwX1BBUjQsIDB4MzAwNzExZjgpOwkvKiBVYXJ0IEMgKEdQQ1M0LCAweDAxMWY4LCA4IEJ5dGVzKSAqLworCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVI1LCAweDM0MDcxMGY4KTsJLyogVWFydCBEIChHUENTNSwgMHgwMTBmOCwgOCBCeXRlcykgKi8KKwl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSNiwgMHhlM2ZmYzAwMCk7CS8qIFNEUkFNICgweDAwMDAwMDAwLCAxMjhNQikgKi8KKwl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSNywgMHhhYTNmZDAwMCk7CS8qIFN0cmF0YUZsYXNoIChST01DUzEsIDB4MTAwMDAwMDAsIDE2TUIpICovCisJd3JpdGVfbW1jcl9sb25nKFNDNTIwX1BBUjgsIDB4Y2EzZmQxMDApOwkvKiBTdHJhdGFGbGFzaCAoUk9NQ1MyLCAweDExMDAwMDAwLCAxNk1CKSAqLworCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVI5LCAweDQyMDNkOTAwKTsJLyogU1JBTSAoR1BDUzAsIDB4MTkwMDAwMDAsIDFNQikgKi8KKwl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSMTAsIDB4NGUwM2Q5MTApOwkvKiBTUkFNIChHUENTMywgMHgxOTEwMDAwMCwgMU1CKSAqLworCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVIxMSwgMHg1MDAxODEwMCk7CS8qIERQLVJBTSAoR1BDUzQsIDB4MTgxMDAwMDAsIDRrQikgKi8KKwl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSMTIsIDB4NTQwMjAwMDApOwkvKiBDRkxBU0gxICgweDIwMDAwMDAwMCwgNGtCKSAqLworCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVIxMywgMHg1YzAyMDAwMSk7CS8qIENGTEFTSDIgKDB4MjAwMDEwMDAwLCA0a0IpICovCisvKgl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSMTQsIDB4OGJmZmY4MDApOyAqLwkvKiBCT09UQ1MgYXQgIDB4MTgwMDAwMDAgKi8KKy8qCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVIxNSwgMHgzODIwMTAwMCk7ICovCS8qIExFRHMgZXRjIChHUENTNiwgMHgxMDAwLCAyMCBCeXRlcyAqLworCisJLyogRGlzYWJsZSBXYXRjaGRvZyAqLworCXdyaXRlX21tY3Jfd29yZCgweDBjYjAsIDB4MzMzMyk7CisJd3JpdGVfbW1jcl93b3JkKDB4MGNiMCwgMHhjY2NjKTsKKwl3cml0ZV9tbWNyX3dvcmQoMHgwY2IwLCAweDAwMDApOworCisJLyogQ2hpcCBTZWxlY3QgQ29uZmlndXJhdGlvbiAqLworCXdyaXRlX21tY3Jfd29yZChTQzUyMF9CT09UQ1NDVEwsIDB4MDAzMyk7CisJd3JpdGVfbW1jcl93b3JkKFNDNTIwX1JPTUNTMUNUTCwgMHgwNjE1KTsKKwl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfUk9NQ1MyQ1RMLCAweDA2MTUpOworCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0FERERFQ0NUTCwgMHgwMik7CisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1VBUlQxQ1RMLCAweDA3KTsKKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfU1lTQVJCQ1RMLDB4MDYpOworCXdyaXRlX21tY3Jfd29yZChTQzUyMF9TWVNBUkJNRU5CLCAweDAwMDMpOworCisJLyogQ3J5c3RhbCBpcyAzMy4wMDBNSHogKi8KKwlnZC0+YnVzX2NsayA9IDMzMDAwMDAwOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcmFtX2luaXQodm9pZCkKK3sKKwlpbml0X3NjNTIwX2RyYW0oKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzaG93X2Jvb3RfcHJvZ3Jlc3MoaW50IHZhbCkKK3sKKwl1Y2hhciBsZWRfbWFzazsKKworCWxlZF9tYXNrID0gMHgwMDsKKworCWlmICh2YWwgPCAwKQorCQlsZWRfbWFzayB8PSBMRURfRVJSX0JJVE1BU0s7CisKKwlsZWRfbWFzayB8PSAodWNoYXIpKHZhbCAmIDB4MDAxZik7CisJb3V0YihsZWRfbWFzaywgTEVEX0xBVENIX0FERFJFU1MpOworfQorCisKK2ludCBsYXN0X3N0YWdlX2luaXQodm9pZCkKK3sKKwlpbnQgbWlub3I7CisJaW50IG1ham9yOworCisJbWFqb3IgPSBtaW5vciA9IDA7CisKKwlwcmludGYoIlNlcmNrIENvbnRyb2xzIGVORVRcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3Vsb25nIGJvYXJkX2ZsYXNoX2dldF9sZWdhY3kgKHVsb25nIGJhc2UsIGludCBiYW5rbnVtLCBmbGFzaF9pbmZvX3QgKiBpbmZvKQoreworCWlmIChiYW5rbnVtID09IDApIHsJLyogbm9uLUNGSSBib290IGZsYXNoICovCisJCWluZm8tPnBvcnR3aWR0aCA9IEZMQVNIX0NGSV84QklUOworCQlpbmZvLT5jaGlwd2lkdGggPSBGTEFTSF9DRklfQlk4OworCQlpbmZvLT5pbnRlcmZhY2UgPSBGTEFTSF9DRklfWDg7CisJCXJldHVybiAxOworCX0gZWxzZQorCQlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2VORVQvZU5FVF9zdGFydC5TIGIvYm9hcmQvZU5FVC9lTkVUX3N0YXJ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIwN2Q2MgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2VORVQvZU5FVF9zdGFydC5TCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDgKKyAqIEdyYWVtZSBSdXNzLCBncmFlbWUucnVzc0BnbWFpbC5jb20uCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgImhhcmR3YXJlLmgiCisKKy8qIGJvYXJkIGVhcmx5IGludGlhbGl6YXRpb24gKi8KKy5nbG9ibCBlYXJseV9ib2FyZF9pbml0CitlYXJseV9ib2FyZF9pbml0OgorCS8qIE5vIDMyLWJpdCBib2FyZCBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbiAqLworCWptcAkqJWVicAkJLyogcmV0dXJuIHRvIGNhbGxlciAqLworCisuZ2xvYmwgc2hvd19ib290X3Byb2dyZXNzX2FzbQorc2hvd19ib290X3Byb2dyZXNzX2FzbToKKworCW1vdmIJJWFsLCAlZGwJLyogQ3JlYXRlIFdvcmtpbmcgQ29weSAqLworCWFuZGIJJDB4ODAsICVkbAkvKiBNYXNrIGluIG9ubHkgRXJyb3IgYml0ICovCisJc2hyYgkkMHgwMiwgJWRsCS8qIFNoaWZ0IEVycm9yIGJpdCB0byBFcnJvciBMRUQgKi8KKwlhbmRiCSQweDBmLCAlYWwJLyogTWFzayBvdXQgJ0Vycm9yJyBiaXQgKi8KKwlvcmIJJWRsLCAlYWwJLyogTWFzayBpbiBFUlIgTEVEICovCisJbW92dwkkTEVEX0xBVENIX0FERFJFU1MsICVkeAorCW91dGIJJWFsLCAlZHgKKwlqbXAJKiVlYnAJCS8qIHJldHVybiB0byBjYWxsZXIgKi8KKworLmdsb2JsIGNwdV9oYWx0X2FzbQorY3B1X2hhbHRfYXNtOgorCW1vdmIJJDB4MGYsICVhbAorCW1vdncJJExFRF9MQVRDSF9BRERSRVNTLCAlZHgKKwlvdXRiCSVhbCwgJWR4CisJaGx0CisJam1wIGNwdV9oYWx0X2FzbQpkaWZmIC0tZ2l0IGEvYm9hcmQvZU5FVC9lTkVUX3N0YXJ0MTYuUyBiL2JvYXJkL2VORVQvZU5FVF9zdGFydDE2LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhlNGQ4MwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2VORVQvZU5FVF9zdGFydDE2LlMKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOAorICogR3JhZW1lIFJ1c3MsIGdyYWVtZS5ydXNzQGdtYWlsLmNvbS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICogMTZiaXQgaW5pdGlhbGl6YXRpb24gY29kZS4KKyAqIFRoaXMgY29kZSBoYXZlIHRvIG1hcCB0aGUgYXJlYSBvZiB0aGUgYm9vdCBmbGFzaAorICogdGhhdCBpcyB1c2VkIGJ5IFUtYm9vdCB0byBpdHMgZmluYWwgZGVzdGluYXRpb24uCisgKi8KKworLyogI2luY2x1ZGUgPGFzbS9pYy9zYzUyMF9kZWZzLmg+ICovCisKKyNpbmNsdWRlICJoYXJkd2FyZS5oIgorCisudGV4dAorLnNlY3Rpb24gLnN0YXJ0MTYsICJheCIKKy5jb2RlMTYKKy5nbG9ibCBib2FyZF9pbml0MTYKK2JvYXJkX2luaXQxNjoKKwkvKiBBbGlhcyBNTUNSIHRvIDB4ZGYwMDAgKi8KKwltb3Z3CSQweGZmZmMsICVkeAorCW1vdmwJJDB4ODAwZGYwY2IsICVlYXgKKwlvdXRsCSVlYXgsICVkeAorCisJLyogU2V0IGRzIHRvIHBvaW50IHRvIE1NQ1IgYWxpYXMgKi8KKwltb3Z3CSQweGRmMDAsICVheAorCW1vdncJJWF4LCAlZHMKKworCS8qIE1hcCBQQVIgZm9yIEJvb3QgRmxhc2ggKEJPT1RDUywgNTEya0IgQCAweDM4MDAwMDAwMCkgKi8KKwltb3ZsICAgICQweDAwYzAsICVlZGkJCS8qIFNDNTIwX1BBUjE0ICovCisJbW92bAkkMHg4YmZmZjgwMCwgJWVheAkvKiBUT0RPOiBDaGVjayB0aGlzICovCisJbW92bAklZWF4LCAoJWRpKQorCisJLyogTWFwIFBBUiBmb3IgTEVELCBIZXggU3dpdGNoZXMgKEdQQ1M2LCAyMCBCeXRlcyBAIDB4MTAwMCkgKi8KKwltb3ZsICAgICQweDAwYzQsICVlZGkJCS8qIFNDNTIwX1BBUjE1ICovCisJbW92bAkkMHgzODIwMTAwMCwgJWVheAorCW1vdmwJJWVheCwgKCVkaSkKKworCS8qIERpc2FibGUgU0RSQU0gd3JpdGUgYnVmZmVyICovCisJbW92dyAgICAkMHgwMDQwLCAlZGkJCS8qIFNDNTIwX0RCQ1RMICovCisJeG9ydyAgICAlYXgsICVheAorCW1vdmIgICAgJWFsLCAoJWRpKQorCisJLyogRGlzYWJlIE1NQ1IgYWxpYXMgKi8KKwltb3Z3CSQweGZmZmMsICVkeAorCW1vdmwJJDB4MDAwMDAwY2IsICVlYXgKKwlvdXRsCSVlYXgsICVkeAorCisJLyogdGhlIHJldHVybiBhZGRyZXNzIGlzIHN0b3JlZCBpbiBicCAqLworCWptcAkqJWJwCisKKy5zZWN0aW9uIC5iaW9zLCAiYXgiCisuY29kZTE2CisuZ2xvYmwgcmVhbG1vZGVfcmVzZXQKK3JlYWxtb2RlX3Jlc2V0OgorCS8qIEFsaWFzIE1NQ1IgdG8gMHhkZjAwMCAqLworCW1vdncJJDB4ZmZmYywgJWR4CisJbW92bAkkMHg4MDBkZjBjYiwgJWVheAorCW91dGwJJWVheCwgJWR4CisKKwkvKiBTZXQgZHMgdG8gcG9pbnQgdG8gTU1DUiBhbGlhcyAqLworCW1vdncJJDB4ZGYwMCwgJWF4CisJbW92dwklYXgsICVkcworCisJLyogaXNzdWUgc29mdHdhcmUgcmVzZXQgdGhvcnVnaCBNTUNSICovCisJbW92bCAgICAkMHhkNzIsICVlZGkKKwltb3ZiCSQweDAxLCAlYWwKKwltb3ZiCSVhbCwgKCVkaSkKKworMToJaGx0CisJam1wCTEKZGlmZiAtLWdpdCBhL2JvYXJkL2VORVQvaGFyZHdhcmUuaCBiL2JvYXJkL2VORVQvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjQ3NGE2Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvZU5FVC9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDgKKyAqIEdyYWVtZSBSdXNzLCBncmFlbWUucnVzc0BnbWFpbC5jb20uCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBIQVJEV0FSRV9IXworI2RlZmluZSBIQVJEV0FSRV9IXworCisjZGVmaW5lIExFRF9MQVRDSF9BRERSRVNTCTB4MTAwMgorI2RlZmluZSBMRURfUlVOX0JJVE1BU0sJCTB4MDEKKyNkZWZpbmUgTEVEXzFfQklUTUFTSwkJMHgwMgorI2RlZmluZSBMRURfMl9CSVRNQVNLCQkweDA0CisjZGVmaW5lIExFRF9SWF9CSVRNQVNLCQkweDA4CisjZGVmaW5lIExFRF9UWF9CSVRNQVNLCQkweDEwCisjZGVmaW5lIExFRF9FUlJfQklUTUFTSwkJMHgyMAorCisjZW5kaWYgLyogSEFSRFdBUkVfSF8gKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2VORVQvdS1ib290LmxkcyBiL2JvYXJkL2VORVQvdS1ib290LmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2QyOGVmCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvZU5FVC91LWJvb3QubGRzCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCitPVVRQVVRfRk9STUFUKCJlbGYzMi1pMzg2IiwgImVsZjMyLWkzODYiLCAiZWxmMzItaTM4NiIpCitPVVRQVVRfQVJDSChpMzg2KQorRU5UUlkoX3N0YXJ0KQorCitTRUNUSU9OUworeworCS4gPSAweDM4MDQwMDAwOwkJLyogTG9jYXRpb24gb2YgYm9vdGNvZGUgaW4gZmxhc2ggKi8KKwkudGV4dCAgOiB7ICooLnRleHQpOyB9CisKKwkuID0gQUxJR04oNCk7CisJLnJvZGF0YSA6IHsgKigucm9kYXRhKSAqKC5yb2RhdGEuc3RyMS4xKSAqKC5yb2RhdGEuc3RyMS4zMikgfQorCisJX2kzODZib290X3RleHRfc2l6ZSA9IFNJWkVPRigudGV4dCkgKyBTSVpFT0YoLnJvZGF0YSk7CisKKwkuID0gMHgwM0ZGMDAwMDsJCS8qIFJhbSBkYXRhIHNlZ21lbnQgdG8gdXNlICovCisJX2kzODZib290X3JvbWRhdGFfZGVzdCA9IEFCU09MVVRFKC4pOworCS5kYXRhIDogQVQgKCBMT0FEQUREUigucm9kYXRhKSArIFNJWkVPRigucm9kYXRhKSApIHsgKiguZGF0YSkgfQorCV9pMzg2Ym9vdF9yb21kYXRhX3N0YXJ0ID0gTE9BREFERFIoLmRhdGEpOworCisJLiA9IEFMSUdOKDQpOworCS5nb3QgOiBBVCAoIExPQURBRERSKC5kYXRhKSArIFNJWkVPRiguZGF0YSkgKSB7ICooLmdvdCkgfQorCisJLiA9IEFMSUdOKDQpOworCV9fdV9ib290X2NtZF9zdGFydCA9IC47CisJLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKwlfX3VfYm9vdF9jbWRfZW5kID0gLjsKKwlfaTM4NmJvb3RfY21kX3N0YXJ0ID0gTE9BREFERFIoLnVfYm9vdF9jbWQpOworCisJX2kzODZib290X3JvbWRhdGFfc2l6ZSA9IFNJWkVPRiguZGF0YSkgKyBTSVpFT0YoLmdvdCkgKyBTSVpFT0YoLnVfYm9vdF9jbWQpOworCisJLiA9IEFMSUdOKDQpOworCV9pMzg2Ym9vdF9ic3Nfc3RhcnQgPSBBQlNPTFVURSguKTsKKwkuYnNzIChOT0xPQUQpIDogeyAqKC5ic3MpIH0KKwlfaTM4NmJvb3RfYnNzX3NpemUgPSBTSVpFT0YoLmJzcyk7CisKKwkvKiAxNmJpdCByZWFsbW9kZSB0cmFtcG9saW5lIGNvZGUgKi8KKwkucmVhbG1vZGUgMHg3YzAgOiBBVCAoIExPQURBRERSKC5nb3QpICsgU0laRU9GKC5nb3QpICsgU0laRU9GKC51X2Jvb3RfY21kKSkgeyAqKC5yZWFsbW9kZSkgfQorCisJX2kzODZib290X3JlYWxtb2RlID0gTE9BREFERFIoLnJlYWxtb2RlKTsKKwlfaTM4NmJvb3RfcmVhbG1vZGVfc2l6ZSA9IFNJWkVPRigucmVhbG1vZGUpOworCisJLyogMTZiaXQgQklPUyBlbXVsYXRpb24gY29kZSAoanVzdCBlbm91Z2ggdG8gYm9vdCBMaW51eCkgKi8KKwkuYmlvcyAwIDogQVQgKCBMT0FEQUREUigucmVhbG1vZGUpICsgU0laRU9GKC5yZWFsbW9kZSkgKSB7ICooLmJpb3MpIH0KKworCV9pMzg2Ym9vdF9iaW9zID0gTE9BREFERFIoLmJpb3MpOworCV9pMzg2Ym9vdF9iaW9zX3NpemUgPSBTSVpFT0YoLmJpb3MpOworCisJLyogVGhlIGxvYWQgYWRkcmVzc2VzIGJlbG93IGFzc3VtZXMgdGhhdCB0aGUgZmxhc2gKKwkgKiB3aWxsIGJlIG1hcHBlZCBzbyB0aGF0IDB4Mzg3ZjAwMDAgPT0gMHhmZmZmMDAwMAorCSAqIGF0IHJlc2V0IHRpbWUKKwkgKgorCSAqIFRoZSBmZTAwIGFuZCBmZjAwIG9mZnNldHMgb2YgdGhlIHN0YXJ0MzIgYW5kIHN0YXJ0MTYKKwkgKiBzZWdtZW50cyBhcmUgYXJiaXRyYXJ5LCB0aGUganVzdCBoYXZlIHRvIGJlIG1hcHBlZAorCSAqIGF0IHJlc2V0IGFuZCB0aGUgY29kZSBoYXZlIHRvIGZpdC4KKwkgKiBUaGUgZmZmMCBvZmZzZXQgb2YgcmVzZXQgaXMgaW1wb3J0YW50LCBob3dldmVyLgorCSAqLworCisJLiA9IDB4ZmZmZmZlMDA7CisJLnN0YXJ0MzIgOiBBVCAoMHgzODA3ZmUwMCkgeyAqKC5zdGFydDMyKTsgfQorCisJLiA9IDB4ZjgwMDsKKwkuc3RhcnQxNiA6IEFUICgweDM4MDdmODAwKSB7ICooLnN0YXJ0MTYpOyB9CisKKwkuID0gMHhmZmYwOworCS5yZXNldCA6IEFUICgweDM4MDdmZmYwKSB7ICooLnJlc2V0KTsgfQorCV9pMzg2Ym9vdF9lbmQgPSAoTE9BREFERFIoLnJlc2V0KSArIFNJWkVPRigucmVzZXQpICk7Cit9Cg==